home *** CD-ROM | disk | FTP | other *** search
- // main.c
-
- #include <A4Stuff.h>
- #include <Resources.h>
- #include <Windows.h>
-
- #define OnscreenWindow(window) (IsWindowVisible(window) && !EmptyRgn(((WindowPtr)window)->visRgn))
-
- typedef pascal void (*sizeWindow)(WindowRef theWindow, short w, short h, Boolean fUpdate);
- sizeWindow gSizeWindowAddr;
- pascal void MySizeWindow(WindowRef theWindow, short w, short h, Boolean fUpdate);
-
- typedef pascal void (*hideWindow)(WindowRef theWindow);
- hideWindow gHideWindowAddr;
- pascal void MyHideWindow(WindowRef theWindow);
-
- typedef pascal void (*showHide)(WindowRef theWindow, Boolean showFlag);
- showHide gShowHideAddr;
- pascal void MyShowHide(WindowRef theWindow, Boolean showFlag);
-
- void SlowCloseWindow(WindowPeek window);
-
- void main(void) {
- Handle init;
-
- EnterCodeResource();
-
- init = Get1Resource('INIT', 0);
- DetachResource(init);
-
- gSizeWindowAddr = (sizeWindow)NGetTrapAddress(_SizeWindow, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MySizeWindow, _SizeWindow, ToolTrap);
-
- gHideWindowAddr = (hideWindow)NGetTrapAddress(_HideWindow, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyHideWindow, _HideWindow, ToolTrap);
-
- gShowHideAddr = (showHide)NGetTrapAddress(_ShowHide, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyShowHide, _ShowHide, ToolTrap);
-
- ExitCodeResource();
- }
-
- void SlowCloseWindow(WindowPeek window) {
- if (OnscreenWindow(window)) {
- WindowPeek i;
- for (i = (WindowPeek)FrontWindow(); i != nil; i = i->nextWindow) {
- if (i == window) {
- SizeWindow((WindowPtr)window, 0, 0, false);
- return;
- }
- }
- }
- }
-
- pascal void MySizeWindow(WindowRef theWindow, short w, short h, Boolean fUpdate) {
- WindowPtr window;
- short oldWidth, oldHeight, currentWidth, currentHeight, i;
- Str255 s;
-
- EnterCodeResource();
-
- window = (WindowPtr)theWindow;
- if (OnscreenWindow(theWindow)) {
- oldWidth = window->portRect.right - window->portRect.left;
- oldHeight = window->portRect.bottom - window->portRect.top;
-
- if (oldHeight != h) {
- short heightSign = h > oldHeight ? 1 : -1;
- currentHeight = oldHeight+heightSign;
- for (i = currentHeight; i != h; i += heightSign) {
- gSizeWindowAddr(theWindow, oldWidth, (currentHeight += heightSign), false);
- }
- }
- if (oldWidth != w) {
- short widthSign = w > oldWidth ? 1 : -1;
- currentWidth = oldWidth+(2*widthSign);
- for (i = currentWidth; i != w; i += widthSign) {
- gSizeWindowAddr(theWindow, (currentWidth += widthSign)-1, h, false);
- }
- }
- }
- gSizeWindowAddr(theWindow, w, h, fUpdate);
-
- ExitCodeResource();
- }
-
- pascal void MyHideWindow(WindowRef theWindow) {
- EnterCodeResource();
-
- SlowCloseWindow((WindowPeek)theWindow);
- gHideWindowAddr(theWindow);
-
- ExitCodeResource();
- }
-
- pascal void MyShowHide(WindowRef theWindow, Boolean showFlag) {
- EnterCodeResource();
-
- if (!showFlag) SlowCloseWindow((WindowPeek)theWindow);
- gShowHideAddr(theWindow, showFlag);
-
- ExitCodeResource();
- }